package mx.ipn.presentacion.empleado;

import com.trolltech.qt.gui.QIcon;
import com.trolltech.qt.gui.QPixmap;
import com.trolltech.qt.gui.QTableWidget;
import com.trolltech.qt.gui.QTableWidgetItem;
import com.trolltech.qt.gui.QWidget;
import com.trolltech.qt.gui.QComboBox;

import mx.ipn.presentacion.ConexionConNegocios;
import mx.ipn.presentacion.Utilerias;
import mx.ipn.presentacion.empleado.ui.*;
import mx.ipn.to.EmpleadoTO;
import mx.ipn.to.UsuarioTO;
import mx.ipn.to.GrupoUsuarioTO;
import mx.ipn.to.TransferObject;

public class ComportamientoCuenta extends QWidget {

	boolean eventoBotonValor = false;
	boolean banderaBaja = false;
	Ui_EmpleadoPrincipal uii;
	Ui_Cuenta cuenta = null;
	Ui_CambioCuenta modificarCuenta = null;

	String titulo = null;
	UsuarioTO usuarioTO = null;

	GrupoUsuarioTO[] arrGrupoUsuarioTO = null;
	UsuarioTO[] arrUsuarioTO = null;
	UsuarioTO usuario2TO = null;
	EmpleadoTO[] arrEmpleadoTO = null;
	EmpleadoTO[] arrEmpleadoTO2 = null;

	public void llenarComboGrupo(QComboBox combo) {
		if (arrGrupoUsuarioTO != null) {
			combo.clear();
			if (arrGrupoUsuarioTO[0].getTipoError() == 0) {
				for (int x = 0; x < arrGrupoUsuarioTO.length; x++) {
					combo.addItem(arrGrupoUsuarioTO[x].getNombre());
				}
			} else {
				Utilerias.mostrarMensajeError(this, arrGrupoUsuarioTO[0]);
			}
			combo.setCurrentIndex(-1);
		}
	}

	public void llenarComboEmpleado(QComboBox combo) {
		if (arrEmpleadoTO2 != null) {
			combo.clear();
			if (arrEmpleadoTO2[0].getTipoError() == 0) {
				for (int x = 0; x < arrEmpleadoTO2.length; x++) {
					combo.addItem(arrEmpleadoTO2[x].getPersonaTO()
							.getApellidoPaterno()
							+ "; "
							+arrEmpleadoTO2[x].getPersonaTO()
							.getApellidoMaterno()
							+ "; "
							+ arrEmpleadoTO2[x].getPersonaTO().getNombre()
							+ "; "
							+ arrEmpleadoTO2[x].getPuestoTO().getNombre());
				}
			} else {
				Utilerias.mostrarMensajeError(this, arrEmpleadoTO2[0]);
			}
			combo.setCurrentIndex(-1);
		}
	}

	public void agregarCuenta(Ui_EmpleadoPrincipal ui) {
		this.uii = ui;
		arrUsuarioTO = (UsuarioTO[]) ConexionConNegocios.invocaServicio(
				"encontrarUsuariosPorActivo", true, UsuarioTO[].class);
		preparaVentana(ui);
		cuenta.pushButtonValor3Cuenta.setText("A&gregar");
		if (eventoBotonValor == false) {
			cuenta.pushButtonCambioContra.clicked.connect(this,
					"botonModificarContra()");
			cuenta.pushButtonValor3Cuenta.clicked.connect(this,
					"botonAgregar()");
			eventoBotonValor = true;
		}
		cuenta.pushButtonCambioContra.setEnabled(false);
	}

	public void slotNoEditarTabla(int x, int y) {
		llenarTablaBasico(cuenta.tableWidgetResultadoCuenta, arrUsuarioTO[x], x);
	}

	public void consultarCuenta(Ui_EmpleadoPrincipal ui) {
		arrUsuarioTO = (UsuarioTO[]) ConexionConNegocios.invocaServicio(
				"encontrarUsuariosPorActivo", true, UsuarioTO[].class);
		preparaVentana(ui);
		cuenta.pushButtonValor3Cuenta.setVisible(false);
		cuenta.pushButtonCambioContra.setVisible(false);
		cuenta.pushButtonCambioContra.setEnabled(false);
		cuenta.groupBoxAtributos_3.setEnabled(false);
		cuenta.groupBoxAtributos_3.setVisible(false);
	}

	public void bajaCuenta(Ui_EmpleadoPrincipal ui) {
		arrUsuarioTO = (UsuarioTO[]) ConexionConNegocios.invocaServicio(
				"encontrarUsuariosPorActivo", true, UsuarioTO[].class);
		preparaVentana(ui);
		cuenta.pushButtonValor3Cuenta.setText("Ac&tivar/Desactivar");
		if (eventoBotonValor == false) {
			cuenta.pushButtonValor3Cuenta.clicked.connect(this, "botonBaja()");
			cuenta.pushButtonCambioContra.clicked.connect(this,
					"botonModificarContra()");
			eventoBotonValor = true;
		}
		cuenta.groupBoxAtributos_3.setEnabled(false);
		cuenta.pushButtonCambioContra.setEnabled(false);
	}

	public void modificarCuenta(Ui_EmpleadoPrincipal ui, String tituloM,
			boolean bandera) {

		preparaVentanaModificar(ui, tituloM, bandera);
	}

	public void preparaVentana(Ui_EmpleadoPrincipal ui) {
		if (cuenta == null) {
			cuenta = new Ui_Cuenta();
			cuenta.setupUi(ui.centralwidget);
			cuenta.dockWidgetCuenta.setHidden(false);
			ui.gridLayout.addWidget(cuenta.dockWidgetCuenta);
			cuenta.dockWidgetCuenta.setWindowTitle(titulo);

			arrGrupoUsuarioTO = (GrupoUsuarioTO[]) ConexionConNegocios
					.invocaServicio("ObtenerGruposDeUsuario",
							GrupoUsuarioTO[].class);
			arrEmpleadoTO2 = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"buscarEmpleadosActivos", EmpleadoTO[].class);

			llenarComboGrupo(cuenta.comboBoxGrupoCuenta);
			llenarComboEmpleado(cuenta.comboBoxEmpleadoCuenta);

			limpiarCuenta();

			cuenta.pushButtonCancelarCuenta.clicked.connect(this,
					"botonCancelar()");

			cuenta.pushButtonLimpiarCuenta.clicked.connect(this,
					"botonLimpiar()");

			cuenta.comboBoxBuscarCuenta.currentIndexChanged.connect(this,
					"seleccionBusqueda(int)");

			bloqueaComponentes();

			if (banderaBaja == false)
				eventosGenerales();

			cuenta.labelValorCuenta.setVisible(false);
			cuenta.comboBoxValorCuenta.setVisible(false);

			cuenta.laberValor1Cuenta.setVisible(false);
			cuenta.comboBoxValor1Cuenta.setVisible(false);

			cuenta.lineEditvalor2Cuenta.setVisible(false);
			cuenta.labelValor2Cuenta.setVisible(false);

			cuenta.pushButtonLimpiarCuenta.setVisible(false);

		} else
			cuenta.dockWidgetCuenta.setHidden(false);

		cuenta.tableWidgetResultadoCuenta.disconnect();
		llenarTabla(cuenta.tableWidgetResultadoCuenta);
		cuenta.tableWidgetResultadoCuenta.cellChanged.connect(this,
				"slotNoEditarTabla(int,int)");
		cuenta.tableWidgetResultadoCuenta.clicked.connect(this,
				"seleccionCelda()");
		cuenta.comboBoxBuscarCuenta.setCurrentIndex(-1);

	}

	public void preparaVentanaModificar(Ui_EmpleadoPrincipal ui,
			String tituloM, boolean bandera) {
		if (modificarCuenta == null) {
			modificarCuenta = new Ui_CambioCuenta();
			modificarCuenta.setupUi(ui.centralwidget);
			modificarCuenta.dockWidget.setHidden(false);
			ui.gridLayout.addWidget(modificarCuenta.dockWidget, 0, 1);
			modificarCuenta.dockWidget.setWindowTitle(tituloM);
			modificarCuenta.comboBoxGrupoCambioCuen.setEnabled(bandera);

			if (arrGrupoUsuarioTO == null) {
				arrGrupoUsuarioTO = (GrupoUsuarioTO[]) ConexionConNegocios
						.invocaServicio("ObtenerGruposDeUsuario",
								GrupoUsuarioTO[].class);
			}

			llenarComboGrupo(modificarCuenta.comboBoxGrupoCambioCuen);

			limpiarCuentaModificar();

			modificarCuenta.pushButtonCancelar.clicked.connect(this,
					"botonCancelarModificar()");

			eventosGeneralesModificar();

			bloqueaComponentesModificar();

		} else
			modificarCuenta.dockWidget.setHidden(false);

		modificarCuenta.comboBoxGrupoCambioCuen.lineEdit().setText(
				usuarioTO.getGrupoUsuarioTO().getNombre());
		modificarCuenta.comboBoxGrupoCambioCuen.lineEdit().returnPressed.emit();
		modificarCuenta.lineEditUsuarioCambioCuen.setText(usuarioTO
				.getNombreUsuario());
		modificarCuenta.lineEditConfirmaCambioCuen.clear();
		modificarCuenta.lineEditContraseniaCambioCuen.clear();

	}

	public void eventosGenerales() {
		cuenta.comboBoxGrupoCuenta.currentIndexChanged.connect(this,
				"cambioComboGrupo(int)");
		cuenta.comboBoxEmpleadoCuenta.currentIndexChanged.connect(this,
				"cambioComboEmpleado(int)");
		cuenta.lineEditUsuarioCuenta.textEdited.connect(this,
				"cambioNombreUsuario(String)");
		cuenta.lineEditContraseniaCuenta.textEdited.connect(this,
				"cambioContra(String)");
		cuenta.lineEditConfirmaCuenta.textChanged.connect(this,
				"cambioConfirmaContra(String)");

	}

	
	public void eventosGeneralesModificar() {
		modificarCuenta.comboBoxGrupoCambioCuen.currentIndexChanged.connect(
				this, "cambioComboGrupoM(int)");
		modificarCuenta.lineEditUsuarioCambioCuen.textEdited.connect(this,
				"cambioNombreUsuarioM(String)");
		modificarCuenta.lineEditContraseniaCambioCuen.textEdited.connect(this,
				"cambioContraM(String)");
		modificarCuenta.lineEditConfirmaCambioCuen.textEdited.connect(this,
				"cambioConfirmaContraM(String)");

		modificarCuenta.pushButtonModificar.setText("&Modificar");
		modificarCuenta.pushButtonModificar.clicked.connect(this,
				"botonModificar()");
	}

	public void limpiarCuenta() {

		cuenta.comboBoxGrupoCuenta.disconnect();
		cuenta.comboBoxValor1Cuenta.disconnect();
		cuenta.comboBoxValorCuenta.disconnect();
		cuenta.lineEditUsuarioCuenta.disconnect();
		cuenta.lineEditConfirmaCuenta.disconnect();
		cuenta.lineEditContraseniaCuenta.disconnect();
		cuenta.pushButtonBuscarCuenta.disconnect();
		cuenta.comboBoxEmpleadoCuenta.disconnect();

		cuenta.comboBoxEmpleadoCuenta.setCurrentIndex(-1);
		cuenta.comboBoxBuscarCuenta.setCurrentIndex(-1);
		cuenta.comboBoxGrupoCuenta.setCurrentIndex(-1);
		cuenta.comboBoxValor1Cuenta.clear();
		cuenta.comboBoxValorCuenta.clear();
		cuenta.lineEditConfirmaCuenta.clear();
		cuenta.lineEditContraseniaCuenta.clear();
		cuenta.lineEditUsuarioCuenta.clear();

	}

	public void limpiarCuentaModificar() {
		modificarCuenta.pushButtonModificar.disconnect();

		modificarCuenta.comboBoxGrupoCambioCuen.disconnect();
		modificarCuenta.lineEditConfirmaCambioCuen.disconnect();
		modificarCuenta.lineEditContraseniaCambioCuen.disconnect();
		modificarCuenta.lineEditUsuarioCambioCuen.disconnect();

		modificarCuenta.lineEditConfirmaCambioCuen.clear();
		modificarCuenta.lineEditContraseniaCambioCuen.clear();
		modificarCuenta.lineEditUsuarioCambioCuen.clear();

		modificarCuenta.comboBoxGrupoCambioCuen.setCurrentIndex(-1);

	}

	public void botonCancelarModificar() {
		modificarCuenta.dockWidget.setHidden(true);
	}

	public void bloqueaComponentesModificar() {
		modificarCuenta.pushButtonModificar.setEnabled(false);
	}

	public void bloqueaComponentes() {
		cuenta.pushButtonBuscarCuenta.setEnabled(false);
		cuenta.pushButtonLimpiarCuenta.setEnabled(false);
		cuenta.pushButtonValor3Cuenta.setEnabled(false);

	}

	public void llenarTablaBasico(QTableWidget tabla, UsuarioTO elementoTO,
			int x) {

		QTableWidgetItem __Item = new QTableWidgetItem();
		if (elementoTO.getActivo() == false) {
			__Item.setText(com.trolltech.qt.core.QCoreApplication.translate(
					"Cuenta", "Bloqueada"));
			__Item.setIcon(new QIcon(new QPixmap(
					"classpath:mx/ipn/presentacion/recursos/iconos/no.png")));
			tabla.setItem(x, 0, __Item);
		} else {
			__Item.setText(com.trolltech.qt.core.QCoreApplication.translate(
					"Cuenta", "Habilitada"));
			__Item.setIcon(new QIcon(new QPixmap(
					"classpath:mx/ipn/presentacion/recursos/iconos/ok.png")));
			tabla.setItem(x, 0, __Item);
		}

		__Item = new QTableWidgetItem();
		__Item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", elementoTO.getGrupoUsuarioTO().getNombre()));
		tabla.setItem(x, 1, __Item);

		__Item = new QTableWidgetItem();
		__Item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", elementoTO.getNombreUsuario()));
		tabla.setItem(x, 2, __Item);

		arrEmpleadoTO[x] = (EmpleadoTO) ConexionConNegocios.invocaServicio(
				"encontrarEmpleadoPorID", elementoTO.getIdEmpleado(),
				EmpleadoTO.class);

		if (arrEmpleadoTO[x] != null) {
			if (arrEmpleadoTO[x].getTipoError() == 0) {

				__Item = new QTableWidgetItem();
				__Item.setText(com.trolltech.qt.core.QCoreApplication
						.translate("Cuenta", arrEmpleadoTO[x].getNss()));
				tabla.setItem(x, 3, __Item);

				__Item = new QTableWidgetItem();
				__Item.setText(com.trolltech.qt.core.QCoreApplication
						.translate("Cuenta", arrEmpleadoTO[x].getPersonaTO()
								.getNombre()));
				tabla.setItem(x, 4, __Item);

				__Item = new QTableWidgetItem();
				__Item.setText(com.trolltech.qt.core.QCoreApplication
						.translate("Cuenta", arrEmpleadoTO[x].getPersonaTO()
								.getApellidoPaterno()));
				tabla.setItem(x, 5, __Item);

				__Item = new QTableWidgetItem();
				__Item.setText(com.trolltech.qt.core.QCoreApplication
						.translate("Cuenta", arrEmpleadoTO[x].getPersonaTO()
								.getApellidoMaterno()));
				tabla.setItem(x, 6, __Item);

				__Item = new QTableWidgetItem();
				__Item.setText(com.trolltech.qt.core.QCoreApplication
						.translate("Cuenta", arrEmpleadoTO[x].getPuestoTO()
								.getNombre()));
				tabla.setItem(x, 7, __Item);

			} else {
				Utilerias.mostrarMensajeError(this, arrEmpleadoTO[x]);
			}
		}

		tabla.resizeColumnToContents(0);
		tabla.resizeColumnToContents(2);
		tabla.setColumnWidth(4, 65);
		tabla.setColumnWidth(1, 100);
		tabla.setColumnWidth(5, 100);
		tabla.setColumnWidth(6, 120);
	}

	
	public void llenarTabla(QTableWidget tabla) {
		tabla.clear();
		agregarTabla(tabla);
		if (arrUsuarioTO != null) {
			arrEmpleadoTO = new EmpleadoTO[arrUsuarioTO.length];
			tabla.setRowCount(arrUsuarioTO.length);
			tabla
					.setSelectionMode(com.trolltech.qt.gui.QAbstractItemView.SelectionMode.SingleSelection);
			for (int x = 0; x < arrUsuarioTO.length; x++) {
				llenarTablaBasico(tabla, arrUsuarioTO[x], x);
			}
		}
	}

	
	public void agregarTabla(QTableWidget tableWidgetResultadoCuenta) {

		tableWidgetResultadoCuenta.clear();
		tableWidgetResultadoCuenta.setColumnCount(8);

		QTableWidgetItem __colItem = new QTableWidgetItem();
		__colItem.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", "Estado Cuenta"));
		tableWidgetResultadoCuenta.setHorizontalHeaderItem(0, __colItem);

		QTableWidgetItem __colItem1 = new QTableWidgetItem();
		__colItem1.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", "Grupo Usuario"));
		tableWidgetResultadoCuenta.setHorizontalHeaderItem(1, __colItem1);

		QTableWidgetItem __colItem2 = new QTableWidgetItem();
		__colItem2.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", "Usuario"));
		tableWidgetResultadoCuenta.setHorizontalHeaderItem(2, __colItem2);

		QTableWidgetItem __colItem3 = new QTableWidgetItem();
		__colItem3.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", "IMSS"));
		tableWidgetResultadoCuenta.setHorizontalHeaderItem(3, __colItem3);

		QTableWidgetItem __colItem4 = new QTableWidgetItem();
		__colItem4.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", "Nombre"));
		tableWidgetResultadoCuenta.setHorizontalHeaderItem(4, __colItem4);

		QTableWidgetItem __colItem5 = new QTableWidgetItem();
		__colItem5.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", "Apellido Paterno"));
		tableWidgetResultadoCuenta.setHorizontalHeaderItem(5, __colItem5);

		QTableWidgetItem __colItem6 = new QTableWidgetItem();
		__colItem6.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", "Apellido Materno"));
		tableWidgetResultadoCuenta.setHorizontalHeaderItem(6, __colItem6);

		QTableWidgetItem __colItem7 = new QTableWidgetItem();
		__colItem7.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Cuenta", "Puesto"));
		tableWidgetResultadoCuenta.setHorizontalHeaderItem(7, __colItem7);

		tableWidgetResultadoCuenta.setRowCount(0);

	}


	public void botonLimpiar() {
		cuenta.comboBoxBuscarCuenta.setCurrentIndex(-1);
	}

	
	public void botonCancelar() {
		cuenta.dockWidgetCuenta.setHidden(true);
	}

	
	public void seleccionBusqueda(int seleccion) {
		cuenta.pushButtonBuscarCuenta.disconnect();
		cuenta.comboBoxValorCuenta.disconnect();
		cuenta.comboBoxValor1Cuenta.disconnect();
		cuenta.pushButtonBuscarCuenta.disconnect();
		cuenta.lineEditvalor2Cuenta.disconnect();

		cuenta.pushButtonBuscarCuenta.setEnabled(false);
		cuenta.pushButtonLimpiarCuenta.setEnabled(false);
		cuenta.pushButtonLimpiarCuenta.setVisible(false);

		cuenta.labelValorCuenta.setEnabled(false);
		cuenta.laberValor1Cuenta.setEnabled(false);
		cuenta.labelValor2Cuenta.setEnabled(false);
		cuenta.labelValorCuenta.setVisible(false);
		cuenta.laberValor1Cuenta.setVisible(false);
		cuenta.labelValor2Cuenta.setVisible(false);

		cuenta.comboBoxValorCuenta.setEnabled(false);
		cuenta.comboBoxValor1Cuenta.setEnabled(false);

		cuenta.lineEditvalor2Cuenta.setInputMask("");
		cuenta.lineEditvalor2Cuenta.setEnabled(false);

		cuenta.comboBoxValorCuenta.setVisible(false);
		cuenta.comboBoxValor1Cuenta.setVisible(false);

		cuenta.lineEditvalor2Cuenta.setVisible(false);

		cuenta.comboBoxValorCuenta.clear();
		cuenta.comboBoxValor1Cuenta.clear();

		cuenta.lineEditvalor2Cuenta.clear();

		switch (seleccion) {
		case 0: {

			cuenta.labelValorCuenta.setEnabled(true);
			cuenta.labelValorCuenta.setVisible(true);
			cuenta.labelValorCuenta.setText("Grupo de Usuario:");

			cuenta.comboBoxValorCuenta.setEnabled(true);
			cuenta.comboBoxValorCuenta.setVisible(true);
			llenarComboGrupo(cuenta.comboBoxValorCuenta);

			cuenta.comboBoxValorCuenta.currentIndexChanged.connect(this,
					"modificacionGrupo(int)");
			cuenta.pushButtonBuscarCuenta.clicked.connect(this, "botonGrupo()");

			cuenta.comboBoxValorCuenta.setFocus();
			break;
		}
		case 1: {
			cuenta.labelValor2Cuenta.setEnabled(true);
			cuenta.labelValor2Cuenta.setVisible(true);
			cuenta.labelValor2Cuenta.setText("Nombre de Usuario:");

			cuenta.lineEditvalor2Cuenta.setEnabled(true);
			cuenta.lineEditvalor2Cuenta.setVisible(true);

			cuenta.lineEditvalor2Cuenta.textChanged.connect(this,
					"cambioUsuario(String)");
			cuenta.lineEditvalor2Cuenta.returnPressed.connect(this,
					"botonBuscarUsuario()");
			cuenta.pushButtonBuscarCuenta.clicked.connect(this,
					"botonBuscarUsuario()");
			cuenta.lineEditvalor2Cuenta.setFocus();
			break;
		}
		case 2: {
			cuenta.labelValor2Cuenta.setEnabled(true);
			cuenta.labelValor2Cuenta.setVisible(true);
			cuenta.labelValor2Cuenta.setText("IMMS:");

			cuenta.lineEditvalor2Cuenta.setEnabled(true);
			cuenta.lineEditvalor2Cuenta.setVisible(true);
			cuenta.lineEditvalor2Cuenta.setInputMask("99999999999;#");

			cuenta.lineEditvalor2Cuenta.textChanged.connect(this,
					"cambioNSS(String)");
			cuenta.lineEditvalor2Cuenta.returnPressed.connect(this,
					"botonBuscarNSS()");
			cuenta.pushButtonBuscarCuenta.clicked.connect(this,
					"botonBuscarNSS()");
			cuenta.lineEditvalor2Cuenta.setFocus();
			break;
		}
		case 3: {
			cuenta.labelValorCuenta.setEnabled(true);
			cuenta.labelValorCuenta.setVisible(true);
			cuenta.labelValorCuenta.setText("Estado de Cuenta:");

			cuenta.comboBoxValorCuenta.setEnabled(true);
			cuenta.comboBoxValorCuenta.setVisible(true);
			cuenta.comboBoxValorCuenta.addItem("Bloqueada");
			cuenta.comboBoxValorCuenta.addItem("Habilitada");
			cuenta.comboBoxValorCuenta.setCurrentIndex(-1);

			cuenta.comboBoxValorCuenta.currentIndexChanged.connect(this,
					"modificacionEstado(int)");
			cuenta.pushButtonBuscarCuenta.clicked
					.connect(this, "botonEstado()");

			cuenta.comboBoxValorCuenta.setFocus();
			break;
		}
		case 4: {

			cuenta.pushButtonBuscarCuenta.setEnabled(true);
			cuenta.pushButtonLimpiarCuenta.setVisible(false);
			cuenta.pushButtonBuscarCuenta.clicked.connect(this, "botonTodos()");
			break;
		}

		}
	}


	public void seleccionCelda() {
		seleccionCelda(cuenta.tableWidgetResultadoCuenta);
	}

	public void seleccionCelda(QTableWidget tabla) {
		if (arrUsuarioTO != null) {
			if (banderaBaja == true) {
				cuenta.pushButtonValor3Cuenta.setEnabled(true);
			}

			cuenta.pushButtonCambioContra.setEnabled(true);
			usuarioTO = null;
			usuarioTO = arrUsuarioTO[tabla.currentRow()];

			cuenta.comboBoxGrupoCuenta.lineEdit().setText(
					arrUsuarioTO[tabla.currentRow()].getGrupoUsuarioTO()
							.getNombre());
			cuenta.comboBoxGrupoCuenta.lineEdit().returnPressed.emit();

			cuenta.comboBoxEmpleadoCuenta.lineEdit().setText(
					arrEmpleadoTO[tabla.currentRow()].getPersonaTO()
							.getApellidoPaterno()
							+ "; "
							+arrEmpleadoTO2[tabla.currentRow()].getPersonaTO()
							.getApellidoMaterno()
							+ "; "
							+ arrEmpleadoTO[tabla.currentRow()].getPersonaTO()
									.getNombre()
							+ "; "
							+ arrEmpleadoTO[tabla.currentRow()].getPuestoTO()
									.getNombre());
			cuenta.comboBoxEmpleadoCuenta.lineEdit().returnPressed.emit();

			cuenta.lineEditUsuarioCuenta.setText(arrUsuarioTO[tabla
					.currentRow()].getNombreUsuario());

		}
	}

	public void cambioNSS(String cadena) {
		int lon = cadena.length();
		if (lon < 11) {
			cuenta.pushButtonBuscarCuenta.setEnabled(false);
			cuenta.pushButtonLimpiarCuenta.setEnabled(false);
		} else {
			cuenta.pushButtonBuscarCuenta.setEnabled(true);
			cuenta.pushButtonLimpiarCuenta.setVisible(true);
			cuenta.pushButtonLimpiarCuenta.setEnabled(true);
		}
	}

	public void botonBuscarNSS() {
		if (cuenta.lineEditvalor2Cuenta.text().length() == 11) {
			String cadena = new String(cuenta.lineEditvalor2Cuenta.text());
			UsuarioTO[] arrRespuestaTO = null;
			arrRespuestaTO = (UsuarioTO[]) ConexionConNegocios.invocaServicio(
					"encontrarEmpleadoPorNssActivoEInactivo", cadena,
					UsuarioTO[].class);
			if (arrRespuestaTO != null) {
				if (arrRespuestaTO[0].getTipoError() > 0) {
					Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
				} else {
					arrUsuarioTO = arrRespuestaTO.clone();
					limpiarCuenta();
					if (banderaBaja == false)
						eventosGenerales();
					preparaVentana(null);
				}

			}
		}

	}

	
	public void cambioUsuario(String cadena) {
		int lon = cadena.replace(" ", "").length();
		if (lon > 1) {
			cuenta.pushButtonBuscarCuenta.setEnabled(true);
			cuenta.pushButtonLimpiarCuenta.setVisible(true);
			cuenta.pushButtonLimpiarCuenta.setEnabled(true);
		} else if (lon > 254) {
			cuenta.lineEditvalor2Cuenta.setText(cuenta.lineEditvalor2Cuenta
					.text().substring(0, 254));
		} else {
			cuenta.pushButtonBuscarCuenta.setEnabled(false);
			cuenta.pushButtonLimpiarCuenta.setEnabled(false);
		}
	}

	
	public void botonBuscarUsuario() {
		if (cuenta.lineEditvalor2Cuenta.text().length() <= 255) {
			String cadena = new String(cuenta.lineEditvalor2Cuenta.text());
			UsuarioTO[] arrRespuestaTO = null;
			arrRespuestaTO = (UsuarioTO[]) ConexionConNegocios.invocaServicio(
					"encontrarUsuarioPorNombre", cadena, UsuarioTO[].class);
			if (arrRespuestaTO != null) {
				if (arrRespuestaTO[0].getTipoError() > 0) {
					Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
				} else {
					arrUsuarioTO = arrRespuestaTO.clone();
					limpiarCuenta();
					if (banderaBaja == false)
						eventosGenerales();
					preparaVentana(null);
				}

			}
		}

	}

	
	public void modificacionGrupo(int seleccion) {
		if (seleccion > -1) {
			cuenta.pushButtonBuscarCuenta.setEnabled(true);
			cuenta.pushButtonLimpiarCuenta.setVisible(true);
			cuenta.pushButtonLimpiarCuenta.setEnabled(true);
		} else {
			cuenta.pushButtonBuscarCuenta.setEnabled(false);
			cuenta.pushButtonLimpiarCuenta.setEnabled(false);
		}
	}

	
	public void botonGrupo() {
		UsuarioTO[] arrRespuestaTO = null;
		arrRespuestaTO = (UsuarioTO[]) ConexionConNegocios.invocaServicio(
				"encontrarUsuariosPorGrupo",
				arrGrupoUsuarioTO[cuenta.comboBoxValorCuenta.currentIndex()]
						.getIdGrupoUsuario(), UsuarioTO[].class);
		if (arrRespuestaTO != null) {
			if (arrRespuestaTO[0].getTipoError() > 0) {
				Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
			} else {
				arrUsuarioTO = arrRespuestaTO.clone();
				limpiarCuenta();
				if (banderaBaja == false)
					eventosGenerales();
				preparaVentana(null);
			}
		}
	}

	public void modificacionEstado(int seleccion) {
		if (seleccion > -1) {
			cuenta.pushButtonBuscarCuenta.setEnabled(true);
			cuenta.pushButtonLimpiarCuenta.setVisible(true);
			cuenta.pushButtonLimpiarCuenta.setEnabled(true);
		} else {
			cuenta.pushButtonBuscarCuenta.setEnabled(false);
			cuenta.pushButtonLimpiarCuenta.setEnabled(false);
		}
	}

	
	public void botonEstado() {
		boolean estado;

		if (cuenta.comboBoxValorCuenta.currentIndex() == 0)
			estado = false;
		else
			estado = true;

		UsuarioTO[] arrRespuestaTO = null;
		arrRespuestaTO = (UsuarioTO[]) ConexionConNegocios.invocaServicio(
				"encontrarUsuariosPorActivo", estado, UsuarioTO[].class);

		if (arrRespuestaTO != null) {
			if (arrRespuestaTO[0].getTipoError() > 0) {
				Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
			} else {
				arrUsuarioTO = arrRespuestaTO.clone();
				limpiarCuenta();
				if (banderaBaja == false)
					eventosGenerales();
				preparaVentana(null);
			}
		}
	}

	
	public void botonTodos() {
		UsuarioTO[] arrRespuestaTO = null;
		arrRespuestaTO = (UsuarioTO[]) ConexionConNegocios.invocaServicio(
				"obtenerUsuarios", UsuarioTO[].class);

		if (arrRespuestaTO != null) {
			if (arrRespuestaTO[0].getTipoError() > 0) {
				Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
			} else {
				arrUsuarioTO = arrRespuestaTO.clone();
				limpiarCuenta();
				if (banderaBaja == false)
					eventosGenerales();
				preparaVentana(null);
			}
		}
	}

	public void cambioComboGrupo(int seleccion) {
		emitirEstados();
	}

	public void cambioComboEmpleado(int seleccion) {
		emitirEstados();
	}

	public void cambioNombreUsuario(String cadena) {
		emitirEstados();
	}

	
	public void cambioContra(String cadena) {
		emitirEstados();
	}

	
	public void cambioConfirmaContra(String cadena) {

		int l1 = cuenta.lineEditUsuarioCuenta.text().replace(" ", "").length();
		int l2 = cuenta.lineEditContraseniaCuenta.text().replace(" ", "")
				.length();
		int l3 = cuenta.lineEditConfirmaCuenta.text().replace(" ", "").length();

		if (cuenta.comboBoxGrupoCuenta.currentIndex() > -1
				&& cuenta.comboBoxEmpleadoCuenta.currentIndex() > -1 && l1 > 5
				&& l1 < 255 && l2 == l3 && l2 > 4) {
			cuenta.pushButtonValor3Cuenta.setEnabled(true);
		} else {
			cuenta.pushButtonValor3Cuenta.setEnabled(false);
		}
		emitirEstados();
	}

	
	public void cambioComboGrupoM(int seleccion) {
		emitirEstadosM();
	}

	public void cambioNombreUsuarioM(String cadena) {
		emitirEstadosM();
	}

	public void cambioContraM(String cadena) {
		emitirEstadosM();
	}

	public void cambioConfirmaContraM(String cadena) {

		int l1 = modificarCuenta.lineEditUsuarioCambioCuen.text().replace(" ",
				"").length();
		int l2 = modificarCuenta.lineEditContraseniaCambioCuen.text().replace(
				" ", "").length();
		int l3 = modificarCuenta.lineEditConfirmaCambioCuen.text().replace(" ",
				"").length();

		if (modificarCuenta.comboBoxGrupoCambioCuen.currentIndex() > -1
				&& l1 > 5 && l1 < 255 && l2 == l3 && l2 > 4) {
			modificarCuenta.pushButtonModificar.setEnabled(true);
		} else {
			modificarCuenta.pushButtonModificar.setEnabled(false);
		}
		emitirEstadosM();
	}

	public void botonAgregar() {
		String cad1 = cuenta.lineEditContraseniaCuenta.text().replace(" ", "");
		String cad2 = cuenta.lineEditConfirmaCuenta.text().replace(" ", "");
		if (cad1.compareTo(cad2) == 0) {
			usuario2TO = null;
			usuario2TO = new UsuarioTO();
			usuario2TO
					.setGrupoUsuarioTO(arrGrupoUsuarioTO[cuenta.comboBoxGrupoCuenta
							.currentIndex()]);
			usuario2TO
					.setIdEmpleado(arrEmpleadoTO2[cuenta.comboBoxEmpleadoCuenta
							.currentIndex()].getIdEmpleado());
			usuario2TO.setNombreUsuario(cuenta.lineEditUsuarioCuenta.text());
			usuario2TO.setContrasenia(cuenta.lineEditContraseniaCuenta.text());
			usuario2TO.setActivo(true);

			UsuarioTO reciveTO = (UsuarioTO) ConexionConNegocios
					.invocaServicio("agregarUsuario", usuario2TO,
							UsuarioTO.class);
			if (reciveTO != null) {
				if (reciveTO.getTipoError() == 0) {
					bloqueaComponentes();
					reciveTO.setTipoError(TransferObject.INFO);
					Utilerias.mostrarMensajeError(this, reciveTO);
					limpiarCuenta();
					arrUsuarioTO = (UsuarioTO[]) ConexionConNegocios
							.invocaServicio("encontrarUsuariosPorActivo", true,
									UsuarioTO[].class);
					preparaVentana(uii);
					eventosGenerales();

				} else {
					Utilerias.mostrarMensajeError(this, reciveTO);
				}
			} else {
			}
		} else {
			UsuarioTO mensajeTO = new UsuarioTO();
			mensajeTO.setTipoError(3);
			mensajeTO
					.setError("La contraseña y su confirmación no coinciden, modifiquelas por favor.");
			Utilerias.mostrarMensajeError(this, mensajeTO);
		}
	}

	public void botonBaja() {

		usuario2TO = null;
		usuario2TO = usuarioTO;

		UsuarioTO reciveTO = (UsuarioTO) ConexionConNegocios.invocaServicio(
				"activarDesactivarUsuarioTO", usuario2TO, UsuarioTO.class);

		if (reciveTO != null) {
			if (reciveTO.getTipoError() == 0) {
				bloqueaComponentes();
				reciveTO.setTipoError(TransferObject.INFO);
				Utilerias.mostrarMensajeError(this, reciveTO);
				limpiarCuenta();

				arrUsuarioTO = (UsuarioTO[]) ConexionConNegocios
						.invocaServicio("encontrarUsuariosPorActivo", true,
								UsuarioTO[].class);

				preparaVentana(uii);

			} else {
				Utilerias.mostrarMensajeError(this, reciveTO);
			}
		} else {
		}
	}

	public void botonModificar() {
		String cad1 = modificarCuenta.lineEditContraseniaCambioCuen.text()
				.replace(" ", "");
		String cad2 = modificarCuenta.lineEditConfirmaCambioCuen.text()
				.replace(" ", "");
		if (cad1.compareTo(cad2) == 0) {
			usuario2TO = null;
			usuario2TO = new UsuarioTO();

			usuario2TO
					.setGrupoUsuarioTO(arrGrupoUsuarioTO[modificarCuenta.comboBoxGrupoCambioCuen
							.currentIndex()]);
			usuario2TO.setIdEmpleado(usuarioTO.getIdEmpleado());
			usuario2TO
					.setNombreUsuario(modificarCuenta.lineEditUsuarioCambioCuen
							.text());
			usuario2TO
					.setContrasenia(modificarCuenta.lineEditContraseniaCambioCuen
							.text());
			usuario2TO.setActivo(usuarioTO.getActivo());
			usuario2TO.setIdUsuario(usuarioTO.getIdUsuario());

			UsuarioTO reciveTO = (UsuarioTO) ConexionConNegocios
					.invocaServicio("modificarUsuario", usuario2TO,
							UsuarioTO.class);
			if (reciveTO != null) {
				if (reciveTO.getTipoError() == 0) {
					bloqueaComponentesModificar();
					reciveTO.setTipoError(TransferObject.INFO);
					Utilerias.mostrarMensajeError(this, reciveTO);
					limpiarCuentaModificar();
					eventosGeneralesModificar();
					usuarioTO = usuario2TO;
					usuario2TO = null;
					if (cuenta != null) {
						bloqueaComponentes();
						limpiarCuenta();
						arrUsuarioTO = (UsuarioTO[]) ConexionConNegocios
								.invocaServicio("encontrarUsuariosPorActivo",
										true, UsuarioTO[].class);
						preparaVentana(uii);
						eventosGenerales();
						cuenta.pushButtonCambioContra.setEnabled(false);
					}

					modificarCuenta.dockWidget.setHidden(true);

				} else {
					Utilerias.mostrarMensajeError(this, reciveTO);
				}
			} else {
			}
		} else {
			UsuarioTO mensajeTO = new UsuarioTO();
			mensajeTO.setTipoError(3);
			mensajeTO
					.setError("La contraseña y su confirmación no coinciden, modifiquelas por favor.");
			Utilerias.mostrarMensajeError(this, mensajeTO);

		}
	}

	public void botonModificarContra() {
		if (modificarCuenta == null)
			modificarCuenta(uii, "Modificar Cuenta", true);
		else {
			modificarCuenta.dockWidget.setHidden(false);
			bloqueaComponentesModificar();
			limpiarCuentaModificar();
			preparaVentanaModificar(uii, "Modificar Usuario", true);
			eventosGeneralesModificar();
		}
	}

	public void emitirEstados() {
		cuenta.comboBoxGrupoCuenta.currentIndexChanged
				.emit(cuenta.comboBoxGrupoCuenta.currentIndex());
		cuenta.lineEditUsuarioCuenta.textEdited
				.emit(cuenta.lineEditUsuarioCuenta.text());
		cuenta.lineEditContraseniaCuenta.textEdited
				.emit(cuenta.lineEditContraseniaCuenta.text());
		cuenta.lineEditConfirmaCuenta.textChanged
				.emit(cuenta.lineEditConfirmaCuenta.text());
		cuenta.comboBoxEmpleadoCuenta.currentIndexChanged
				.emit(cuenta.comboBoxEmpleadoCuenta.currentIndex());
	}

	public void emitirEstadosM() {
		modificarCuenta.comboBoxGrupoCambioCuen.currentIndexChanged
				.emit(modificarCuenta.comboBoxGrupoCambioCuen.currentIndex());
		modificarCuenta.lineEditUsuarioCambioCuen.textEdited
				.emit(modificarCuenta.lineEditUsuarioCambioCuen.text());
		modificarCuenta.lineEditContraseniaCambioCuen.textEdited
				.emit(modificarCuenta.lineEditContraseniaCambioCuen.text());
		modificarCuenta.lineEditConfirmaCambioCuen.textChanged
				.emit(modificarCuenta.lineEditConfirmaCambioCuen.text());
	}

}
